package mapred.groupmaxmin;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class GMMReducer extends Reducer<Text, Text, Text, IntWritable> {

    /**
     * 用来统计一共有多少个
     */
    private int total = 0;

    private Text category = new Text("");
    private IntWritable totalNum = new IntWritable(0);
    private Map<String, Integer> times = new HashMap<>();

    // 此方法中，收到的数据特征是下面的值，并且：一个Reducer的实例中，key只有一个
    // 换句话说：每个Reducer的实例，reduce函数只执行一次
    //好:sml-str50
    //   sml-str40
    //   sml-str40
    //   sml-str40
    //   sml-str50
    //   sml-str30
    @Override
    protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {


        String tmp = "";

        // 遍历当前key=好的所有values的值，进行合计
        for (Text txt : values) {
            tmp = txt.toString();
            // 在Map中判断，当前的评分是否已经有数值了
            if (times.containsKey(tmp)) {
                // 如果已经有值的话，将值取出来
                Integer tmpint = times.get(tmp);

                // 加一之后，重新放入Map中
                times.put(tmp, ++tmpint);
            } else {
                // 如果不存在，将初始值1放入当前分类中
                times.put(tmp, 1);
            }
        }

        // 遍历Map的所有key，将其输出到Reducer的输出
        for (String mapKey : times.keySet()) {
            context.write(new Text(mapKey), new IntWritable(times.get(mapKey)));
        }
//        for (IntWritable val: values){
//            total+=val.get();
//        }
//        totalNum.set(total);
//        context.write(key,totalNum);
    }
}
